package ar.edu.utn.frgp.banco.servlets;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.PagoServicios;
import ar.edu.utn.frgp.banco.domain.Servicios;
import ar.edu.utn.frgp.banco.exceptions.ServiceException;
import ar.edu.utn.frgp.banco.service.ServiciosService;
import ar.edu.utn.frgp.banco.service.impl.ServiciosServiceImpl;
import ar.edu.utn.frgp.banco.utils.RequestConverterUtils;

/**
 * Servlet implementation class Servicios
 */
public class ServiciosServlet extends SuperServlet implements Servlet {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -2298316070967868802L;

	PagoServicios pagoActual;
	
	ServiciosService serviciosService;
       
    /**
     * @see SuperServlet#SuperServlet()
     */
    public ServiciosServlet() {
        super();
        serviciosService = new ServiciosServiceImpl();
    }
    
    
    public String pagarInit(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException, Exception {
    	
    	req.setAttribute("pagoActual", pagoActual);
    	req.setAttribute("servicios",serviciosService.obtenerServicios());
    	
    	return "/app/servicios/pagoServicio.jsp";
    }
    
    public String pagar(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException, Exception {
    	
    	try{
    		serviciosService.pagarServicio(pagoActual);
    	}catch (ServiceException e) {
			addError(e.getError());
			return pagarInit(req, resp);
		}
    	
    	return "/app/servicios/pagoServicioOk.jsp";
    }
    

	@Override
	public boolean populate(HttpServletRequest req) {
		boolean devuelve = true;
		pagoActual = new PagoServicios();
		pagoActual.setCuenta(new Cuenta());
		pagoActual.setServicio(new Servicios());
		
		if (req.getParameterMap().containsKey("numeroCuenta")){
			if (RequestConverterUtils.canConvertLong(req, "numeroCuenta")){
				pagoActual.getCuenta().setNumero(RequestConverterUtils.convertLong(req, "numeroCuenta"));
			} else {
				devuelve = false;
			}
		}
		
		if (req.getParameterMap().containsKey("idServicio")){
			pagoActual.getServicio().setId(req.getParameter("idServicio"));
			if (req.getParameter("idServicio") == null){
				addAdvertencia("Debe seleccionar un servicio.");
				devuelve = false;
			}
		}
		
		return devuelve;
	}


}
